package visitor;

import operatori.Impartit;
import operatori.Minus;
import operatori.Operator;
import operatori.Ori;
import operatori.Plus;
import functii.Functie;
import functii.elementare.Constanta;
import functii.elementare.Necunoscuta;
import functii.trigonometrice.Cos;
import functii.trigonometrice.Sin;

public class ToStringVisitor extends Visitor {
	String s;
	
	public ToStringVisitor() {
		s="";
	}
	
	public ToStringVisitor(String s) {
		this.s = s;
	}

	
	public void visit(Plus p) {
		System.out.println("VIZITEZ PLUS");
		visitare(p);
	}

	
	public void visit(Minus m) {
		visitare(m);
	}

	
	public void visit(Impartit i) {
		visitare(i);
	}

	
	public void visit(Ori o) {
		visitare(o);
	}

	
	public void visit(Necunoscuta n) {
		s="x";

	}

	
	public void visit(Constanta c) {
		s=Double.toString(c.getCt());

	}

	
	public void visit(Sin sin) {
		visitare(sin);
	}

	
	public void visit(Cos c) {
		visitare(c);
	}
	
	protected void visitare(Operator o) {
		if (o.getFStang()!=null && o.getFDrept()!=null) {
			visit(o.getFStang());
			String s1=this.s;
			visit(o.getFDrept());
			String s2=this.s;
			s=o.concatTermeni(s1, s2);
		}
	}
	
	protected void visitare(Functie f) {
		if (f.getFStang()!=null) {
			visit(f.getFStang());
			String s1=this.s;
			s=f.concatTermeni(s1);
		}
	}
	
	public String toString() {
		return s;
	}

}
